
%!Tex Program = xelatex
\documentclass[a4paper,12pt]{article}
\usepackage{amssymb,amsmath,amsfonts,amsthm}
%\usepackage{newtxtext,newtxmath}
\usepackage{fontspec,xunicode,xltxtra}
\usepackage[english]{babel}
\usepackage{listings}
\usepackage{mathrsfs}
%\usepackage{zhfontcfg}
%\usepackage{indentfirst}
%\usepackage[colorlinks,linkcolor=black]{hyperref}
%\usepackage{setspace}
%\usepackage{geometry}
% or whatever

%\usepackage[latin1]{inputenc}
% or whatever

\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt

% Ubuntu
\newfontfamily\hei{WenQuanYi Micro Hei Mono}
\newfontfamily\whei{WenQuanYi Zen Hei Mono}
\newfontfamily\kaishu{AR PL KaitiM GB}
\newfontfamily\song{AR PL SungtiL GB}
\newfontfamily\lishu{WenQuanYi Micro Hei Mono}
\setmainfont[Mapping=tex-text]{AR PL SungtiL GB}
\setsansfont[Mapping=tex-text]{AR PL KaitiM GB}
\setmonofont[Mapping=tex-text]{WenQuanYi Micro Hei Mono}

% Mac
%% \newfontfamily\hei{STHeitiSC-Light}
%% \newfontfamily\whei{STHeitiSC-Medium}
%% \newfontfamily\kaishu{STKaitiSC-Regular}
%% \newfontfamily\song{STSongti-SC-Regular}
%% \newfontfamily\lishu{STLibianSC-Regular}
%% \setmainfont[Mapping=tex-text]{STSongti-SC-Regular}
%% \setsansfont[Mapping=tex-text]{STKaitiSC-Regular}
%% \setmonofont[Mapping=tex-text]{STHeitiSC-Medium}
\renewcommand{\baselinestretch}{1.25}

\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{ulem}
\usepackage{pgf}
\usepackage{graphicx}

\usepackage[hmargin={3.18cm, 3.18cm}, width=14.64cm,
             vmargin={2.54cm, 2.54cm}, height=24.62cm]{geometry}
\pagestyle{empty}

\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancy} %fancyhdr宏包新增的页面风格
\renewcommand{\headrulewidth}{0pt}
%\fancyhf{}
\cfoot{第 \thepage 页，共 \pageref{LastPage} 页}%当前页 of 总页数

\renewcommand\baselinestretch{1.2}
\setlength{\headwidth}{\textwidth}

%\renewcommand{\labelenumi}{\bf{\chinese{enumi}、}}
\renewcommand{\labelenumii}{\arabic{enumii}.}
\renewcommand{\labelenumiii}{\Roman{enumiii}}

\newcommand{\chuhao}{\fontsize{42pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaochuhao}{\fontsize{36pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\yihao}{\fontsize{28pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\erhao}{\fontsize{21pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaoerhao}{\fontsize{18pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sihao}{\fontsize{14pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaosihao}{\fontsize{12pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\wuhao}{\fontsize{10.5pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaowuhao}{\fontsize{9pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\liuhao}{\fontsize{7.875pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\qihao}{\fontsize{5.25pt}{\baselineskip}\selectfont} % 字号设置

\newtheorem{theorem}{定理}
\newtheorem{definition}{定义}
\addto{\captionsenglish}{%
  \renewcommand{\refname}{参考文献}%
  \renewcommand{\proofname}{证明}%
  \renewcommand{\figurename}{图}%
%  \renewcommand{\bibname}{参考文献}%
}

\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\renewcommand{\thetheorem}{\arabic{section}.\arabic{theorem}}
\renewcommand{\thedefinition}{\arabic{section}.\arabic{definition}}


\begin{document}

\title{\hei 矩阵向量模板类的继承和运算实现作业报告}


%\date{}
\maketitle

%%------------------------------------------
%% \section{问题}
%% \setcounter{equation}{0}
%% \setcounter{theorem}{0}
%% \setcounter{definition}{0}

\begin{enumerate}
一、项目设计实现逻辑

本程序的实现以一个类模板 \verb|Matrix<T>|作为基类及两个派生类\verb|RowVector<t>| ，\verb|ColVector<T>|作为基础。其中基类\verb|Matrix|的成员参数分别是\verb|int n_row|（用于表示矩阵的行数)、\verb|int n_col|（用于表示矩阵的列数），以及\verb|T*matrix_elements|（用于储存矩阵中的数），\verb|T*matrix_elements|在构造函数中将以\verb|new T[n_row*n_col]|的方式进行内存开辟，在后续操作中进行\verb|delete|以防止内存泄漏。\verb|Matrix|的创建则需3个参数分别代表行数，列数与\verb|T*|（矩阵记录数）。

\item \verb|类模板的实现|
\verb|Class Matrix|中，对符号\verb|=|与符号\verb|<<|进行了重载，以便于实现矩阵的赋值与输出，即可直接实现矩阵对矩阵的赋值与直接通过\verb|cout|进行矩阵的输出。此外函数\verb|is_square()|则用于判断矩阵是否为方阵，是则返回值为1否则返回0。而在派生类中追加了的\verb|*|重载，当操作数为\verb|RowVector<T>*ColVector<T>|、\verb|ColVector<T>*RowVector<T>|、\verb|RowVector<T>*RowVector<T>|、\verb|ColVector<T>*ColVector<t>|时会有不同的返回值。
\item \verb|Main 函数的实现|
通过生成随机数放入动态数组，再将与用户输入的矩阵参数（行和列）创建数组，行向量与列向量的构建方法类似。动态数组的内存开辟规划也由用户输入的矩阵参数决定。矩阵生成完毕后，依次操作并输出结果。
\item \verb|Makefile 的实现|
管理\verb|main.cpp|的编译工作。使用\verb|make|命令直接对其进行编译，并生成可执行文件\verb|test|。
\item \verb|run的实现| 
\verb|run|文件在用户传入一系列参数后通过\verb|for|循环来控制程序运行的次数以便控制测试产生的数据数量。
  
 
二、测试说明
\begin{enumerate}
\item \verb|输入测试|
运行make命令，自动编译main.cpp，并生成可执行文件test;
运行命令后bash run，在同一行后输入七个正整数（用空格间隔），其中不同参数分别代表不同的含义。
参数一：程序main.cpp运行的次数;
参数二三：矩阵M1的行数和列数;
参数四五：矩阵M2的行数和列数;
参数六：行向量R的维数;
参数七：列向量C的维数。
*（注意：若保证矩阵乘法和向量内积有意义，根据其数学原理，第三个参数与第四个参数应该相同）
\item \verb| 输出测试|
当用户运行run输出参数后，将输出随机生成的矩阵M1，M2行向量R，列向量C（输出由重载的运算符完成）;
判断M1是否为方阵;
输出M1*M2、R*C、C*R、R*R、C*C。


\end{enumerate}
\end{enumerate}
\end{enumerate}

\bibliographystyle{plain}
\bibliography{../crazyfish}
\end{document}

%!Tex Program = xelatex
\documentclass[a4paper,12pt]{article}
\usepackage{amssymb,amsmath,amsfonts,amsthm}
%\usepackage{newtxtext,newtxmath}
\usepackage{fontspec,xunicode,xltxtra}
\usepackage[english]{babel}
\usepackage{listings}
\usepackage{mathrsfs}
%\usepackage{zhfontcfg}
%\usepackage{indentfirst}
%\usepackage[colorlinks,linkcolor=black]{hyperref}
%\usepackage{setspace}
%\usepackage{geometry}
% or whatever

%\usepackage[latin1]{inputenc}
% or whatever

\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt

% Ubuntu
\newfontfamily\hei{WenQuanYi Micro Hei Mono}
\newfontfamily\whei{WenQuanYi Zen Hei Mono}
\newfontfamily\kaishu{AR PL KaitiM GB}
\newfontfamily\song{AR PL SungtiL GB}
\newfontfamily\lishu{WenQuanYi Micro Hei Mono}
\setmainfont[Mapping=tex-text]{AR PL SungtiL GB}
\setsansfont[Mapping=tex-text]{AR PL KaitiM GB}
\setmonofont[Mapping=tex-text]{WenQuanYi Micro Hei Mono}

% Mac
%% \newfontfamily\hei{STHeitiSC-Light}
%% \newfontfamily\whei{STHeitiSC-Medium}
%% \newfontfamily\kaishu{STKaitiSC-Regular}
%% \newfontfamily\song{STSongti-SC-Regular}
%% \newfontfamily\lishu{STLibianSC-Regular}
%% \setmainfont[Mapping=tex-text]{STSongti-SC-Regular}
%% \setsansfont[Mapping=tex-text]{STKaitiSC-Regular}
%% \setmonofont[Mapping=tex-text]{STHeitiSC-Medium}
\renewcommand{\baselinestretch}{1.25}

\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{ulem}
\usepackage{pgf}
\usepackage{graphicx}

\usepackage[hmargin={3.18cm, 3.18cm}, width=14.64cm,
             vmargin={2.54cm, 2.54cm}, height=24.62cm]{geometry}
\pagestyle{empty}

\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancy} %fancyhdr宏包新增的页面风格
\renewcommand{\headrulewidth}{0pt}
%\fancyhf{}
\cfoot{第 \thepage 页，共 \pageref{LastPage} 页}%当前页 of 总页数

\renewcommand\baselinestretch{1.2}
\setlength{\headwidth}{\textwidth}

%\renewcommand{\labelenumi}{\bf{\chinese{enumi}、}}
\renewcommand{\labelenumii}{\arabic{enumii}.}
\renewcommand{\labelenumiii}{\Roman{enumiii}}

\newcommand{\chuhao}{\fontsize{42pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaochuhao}{\fontsize{36pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\yihao}{\fontsize{28pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\erhao}{\fontsize{21pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaoerhao}{\fontsize{18pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sihao}{\fontsize{14pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaosihao}{\fontsize{12pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\wuhao}{\fontsize{10.5pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaowuhao}{\fontsize{9pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\liuhao}{\fontsize{7.875pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\qihao}{\fontsize{5.25pt}{\baselineskip}\selectfont} % 字号设置

\newtheorem{theorem}{定理}
\newtheorem{definition}{定义}
\addto{\captionsenglish}{%
  \renewcommand{\refname}{参考文献}%
  \renewcommand{\proofname}{证明}%
  \renewcommand{\figurename}{图}%
%  \renewcommand{\bibname}{参考文献}%
}

\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\renewcommand{\thetheorem}{\arabic{section}.\arabic{theorem}}
\renewcommand{\thedefinition}{\arabic{section}.\arabic{definition}}


\begin{document}

\title{\hei 矩阵向量模板类的继承和运算实现作业报告}


%\date{}
\maketitle

%%------------------------------------------
%% \section{问题}
%% \setcounter{equation}{0}
%% \setcounter{theorem}{0}
%% \setcounter{definition}{0}

\begin{enumerate}
一、项目设计实现逻辑\\
\\
  \item 本程序的实现以一个类模板 \verb|Matrix<T>|作为基类及两个派生类\verb|RowVector<t>| ，\verb|ColVector<T>|作为基础。其中基类\verb|Matrix|的成员参数分别是\verb|int n_row|
  （用于表示矩阵的行数)、\verb|int n_col|（用于表示矩阵的列数），以及
  \verb|T*matrix_elements|（用于储存矩阵中的数），\verb|T*matrix_elements|在构造函数中将以
  \verb|new T[n_row*n_col]|的方式进行内存开辟，在后续操作中进行\verb|delete|以防止内存泄漏。\verb|Matrix|的创建则需3个参数分别代表行数，列数与\verb|T*|（矩阵记录数）。\\
  \\

  \item \verb|类模板的实现|\\
  \verb|Class Matrix|中，对符号\verb|=|与符号\verb|<<|进行了重载，以便于实现矩阵的赋值与输出，即可直接实现矩阵对矩阵的赋值与直接通过\verb|cout|进行矩阵的输出。此外函数\verb|is_square()|则用于判断矩阵是否为方阵，是则返回值为1否则返回0。而在派生类中追加了的\verb|*|重载，当操作数为\verb|RowVector<T>*ColVector<T>|、\verb|ColVector<T>*RowVector<T>|、
  \verb|RowVector<T>*RowVector<T>|、\verb|ColVector<T>*ColVector<t>|时会有不同的返回值。\\
  \\
  \item \verb|Main 函数的实现|\\
  通过生成随机数放入动态数组，再将与用户输入的矩阵参数（行和列）创建数组，行向量与列向量的构建方法类似。动态数组的内存开辟规划也由用户输入的矩阵参数决定。矩阵生成完毕后，依次操作并输出结果。\\
  \\
  \item \verb|Makefile 的实现|\\
   管理\verb|main.cpp|的编译工作。使用\verb|make|命令直接对其进行编译，并生成可执行文件\verb|test|。\\
   \\
  \item \verb|run的实现| \\
  \verb|run|文件在用户传入一系列参数后通过\verb|for|循环来控制程序运行的次数以便控制测试产生的数据数量。\\
  \\
  
 
二、测试说明
\begin{enumerate}
\item \verb|输入测试|\\
\\
运行make命令，自动编译main.cpp，并生成可执行文件test;\\
运行命令后bash run，在同一行后输入七个正整数（用空格间隔），其中不同参数分别代表不同的含义。  \\
参数一：程序main.cpp运行的次数;  \\
参数二三：矩阵M1的行数和列数;  \\
参数四五：矩阵M2的行数和列数;  \\
参数六：行向量R的维数;  \\
参数七：列向量C的维数。  \\
*（注意：若保证矩阵乘法和向量内积有意义，根据其数学原理，第三个参数与第四个参数应该相同）\\
\\
\item \verb| 输出测试|\\  
当用户运行run输出参数后，将输出随机生成的矩阵M1，M2行向量R，列向量C（输出由重载的运算符完成）; \\ 
判断M1是否为方阵;  \\
输出M1*M2、R*C、C*R、R*R、C*C。\\  


\end{enumerate}
\end{enumerate}
\end{enumerate}

\bibliographystyle{plain}
\bibliography{../crazyfish}
\end{document}
